package br.com.future.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import br.com.future.dao.interfaces.TipoDespesaDAOI;
import br.com.future.jdbc.ConnectionFactory;
import br.com.future.log4j.Log4j;
import br.com.future.model.TipoDespesa;

public class TipoDespesaDAO implements TipoDespesaDAOI{

	//chamando o metodo da classe Log4j.
	static Logger logger = Logger.getLogger(Log4j.class);
	
	private Connection conn = null;
	private boolean flag = true;
	
	public TipoDespesaDAO(Connection conn){
		this.conn = conn;
	}
	public TipoDespesaDAO(){
		
	}
	public List<TipoDespesa> consultar (){
		
		verificarInstanciaDeConnection();
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<TipoDespesa> tipoDespesa = new ArrayList<TipoDespesa>();
		String sql = "SELECT CD_DESPESA, DS_DESPESA FROM AM_TIPO_DESPESA";
		
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()){
				TipoDespesa tpDesp = new TipoDespesa();
				tpDesp.setCodigoDespesa(rs.getInt("CD_DESPESA"));
				tpDesp.setDescricaoDespesa(rs.getString("DS_DESPESA"));
				tipoDespesa.add(tpDesp);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			//chamando a mensagem.
			logger.error(e.getMessage());
		}finally{
			if(flag){
				ConnectionFactory.closeConnectionOracle(conn, rs, ps);
			}
		}
		return tipoDespesa;
	}
public TipoDespesa consultar (int nr){
		
	verificarInstanciaDeConnection();
	
		PreparedStatement ps = null;
		ResultSet rs = null;
		TipoDespesa tpDesp = new TipoDespesa();
		String sql = "SELECT CD_DESPESA, DS_DESPESA FROM AM_TIPO_DESPESA where CD_DESPESA = ?";
		
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, nr);
			rs = ps.executeQuery();
			if(rs.next()){
				tpDesp.setCodigoDespesa(rs.getInt("CD_DESPESA"));
				tpDesp.setDescricaoDespesa(rs.getString("DS_DESPESA"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
			//chamando a mensagem.
			logger.error(e.getMessage());
		}finally{
			if(flag){
				ConnectionFactory.closeConnectionOracle(conn, rs, ps);
			}
		}
		return tpDesp;
	}
	private void verificarInstanciaDeConnection() {
		flag = true;
		
		if(conn == null){
			conn = ConnectionFactory.getConnection();
		}else{
			flag = false;
		}
	}
}